﻿#pragma once

#define  DLL_EXPORTS
#ifdef DLL_EXPORTS
#define DLL_WIN_API __declspec(dllexport)
#else
#define DLL_WIN_API __declspec(dllimport)
#endif

#include "hf_defines.h"

#ifdef __cplusplus
extern "C" {
#endif

		/****************************************************************************
		* 名称: NET_SDK_Init
		* 功能: SDK初始化，必须最先调用，仅需要调用一次。
		* 参数: 无
		* 返回值: ERROR_OK 成功，其余失败
		*****************************************************************************/
		DLL_WIN_API int NET_SDK_Init();

		/****************************************************************************
		* 名称: NET_SDK_Release
		* 功能: SDK释放，必须最后调用
		* 参数: 无
		* 返回值: ERROR_OK 成功，其余失败
		*****************************************************************************/
		DLL_WIN_API int NET_SDK_Release();

		/****************************************************************************
		* 名称: NET_Login
		* 功能: 设备登录
		* 参数:
				[IN] pIP			设备IP地址
				[IN] pUser		用户名
				[IN] pPwd		密码
		* 返回值:  成功返回登录句柄，失败返回 <= 0
		*****************************************************************************/
		DLL_WIN_API int NET_Login(char *pIP, char *pUser, char *pPwd);

		/****************************************************************************
		* 名称: NET_Login
		* 功能: 设备注销
		* 参数:
				[IN] nUserID		登录句柄
		* 返回值:  ERROR_OK 成功，其余失败
		*****************************************************************************/
		DLL_WIN_API int NET_Logout(int nUserID);

		/****************************************************************************
		* 名称: HNPC_LAN_SEARCH_CALLBACK
		* 功能: 局域网搜索回调函数
		* 参数:
				[OUT] pData		消息内容
		* 返回值: 无
		*****************************************************************************/
		typedef void(*NET_SEARCH_CALLBACK)(SEARCH_DATA *pData);

		/****************************************************************************
		* 名称: NET_StartLanService
		* 功能: 开启局域网服务 (设备搜索、设置网络等)
		* 参数:
				[IN] cbNetSearch			接收数据的回调函数
		* 返回值: ERROR_OK 成功, 其他失败
		*****************************************************************************/
		DLL_WIN_API int NET_StartLanService(NET_SEARCH_CALLBACK cbNetSearch);

		/****************************************************************************
		* 名称: NET_SearchOnce
		* 功能: 局域网设备搜索
		* 参数: 无
		* 返回值: ERROR_OK 成功, 其他失败
		*****************************************************************************/
		DLL_WIN_API int NET_SearchOnce();

		/****************************************************************************
		* 名称: NET_SetNetwork
		* 功能: 修改设备网络参数
		* 参数:
				[IN] pData			网络参数
		* 返回值: ERROR_OK 成功, 其他失败
		*****************************************************************************/
		DLL_WIN_API int NET_SetNetwork(NETWORK_PARA *pData);

		/****************************************************************************
		* 名称: NET_STREAM_CALLBACK
		* 功能: 视频数据回调函数
		* 参数:
				[IN] nPlayHandle		会话句柄
				[IN] nPayloadType		视频编码类型，参考 PAYLOAD_TYPE
				[IN] pInfo					视频参数信息
				[IN] pBuffer				音视频数据
				[IN] nSize					数据长度
				[IN] nStreamType		码流类型，0 - 主码流，1 - 子码流
		* 返回值: 无
		*****************************************************************************/
		typedef void(*NET_STREAM_CALLBACK)(int nPlayHandle, int nPayloadType, STREAM_PACKET *pInfo, char *pBuffer, int nSize, int nStreamType);

		/****************************************************************************
		* 名称: NET_DevConnect
		* 功能: 打开设备视频
		* 参数:
				[IN] nUserID				登录句柄
				[IN] nStreamType		视频类型，0：主码流，1：子码流
				[IN] cbNetStream		视频数据回调函数
		* 返回值: 成功返回此次连接的会话句柄, 其他失败
		*****************************************************************************/
		DLL_WIN_API int NET_DevConnect(int nUserID, int nStreamType, NET_STREAM_CALLBACK cbNetStream);

		/****************************************************************************
		* 名称: NET_DevDisconnect
		* 功能: 断开设备视频
		* 参数:
				[IN] nUserID		登录句柄
		* 返回值: ERROR_OK 成功, 其他失败
		*****************************************************************************/
		DLL_WIN_API int NET_DevDisconnect(int nUserID);

		/****************************************************************************
		* 名称: NET_UPLOAD_CALLBACK
		* 功能: 升级文件上传进度回调函数
		* 参数:
				[IN] nUserID			登录句柄
				[IN] nPercent		文件上传进度值
		* 返回值: 无
		*****************************************************************************/
		typedef void(*NET_UPLOAD_CALLBACK)(int nUserID, float nPercent);

		/****************************************************************************
		* 名称: NET_UPGRADE_CALLBACK
		* 功能: 升级进度回调函数
		* 参数:
				[IN] nUserID			登录句柄
				[IN] nPercent		升级进度值
		* 返回值: 无
		*****************************************************************************/
		typedef void(*NET_UPGRADE_CALLBACK)(int nUserID, int nPercent);

		/****************************************************************************
		* 名称: NET_DevUpgrade
		* 功能: 升级
		* 参数:
				[IN] nUserID					登录句柄
				[IN] pFilePath				升级文件路径
				[IN] cbNetUpload			升级文件上传进度回调函数
				[IN] cbNetUpgrade		升级进度回调函数
		* 返回值: ERROR_OK 成功, 其他失败
		*****************************************************************************/
		DLL_WIN_API int NET_DevUpgrade(int nUserID, char* pFilePath, NET_UPLOAD_CALLBACK cbNetUpload, NET_UPGRADE_CALLBACK cbNetUpgrade);

		/****************************************************************************
		* 名称: NET_RESPONSE_CALLBACK
		* 功能: 操作结果回调函数
		* 参数:
				[IN] pIP				设备IP地址
				[IN] pResp			消息内容
		* 返回值: 无
		*****************************************************************************/
		typedef void(*NET_RESPONSE_CALLBACK)(int nUserID, char* pResp);

		/****************************************************************************
		* 名称: NET_DevReboot
		* 功能: 设备重启
		* 参数:
				[IN] nUserID						登录句柄
				[IN] cbNetResponse			操作结果回调函数
		* 返回值: ERROR_OK 成功, 其他失败
		*****************************************************************************/
		DLL_WIN_API int NET_DevReboot(int nUserID, NET_RESPONSE_CALLBACK cbNetResponse);

		/****************************************************************************
		* 名称: NET_DevRestore
		* 功能: 设备恢复出厂
		* 参数:
				[IN] nUserID						登录句柄
				[IN] cbNetResponse			操作结果回调函数
		* 返回值: ERROR_OK 成功, 其他失败
		*****************************************************************************/
		DLL_WIN_API int NET_DevRestore(int nUserID, NET_RESPONSE_CALLBACK cbNetResponse);

		/****************************************************************************
		* 名称: NET_DevSetTime
		* 功能: 设置系统时间
		* 参数:
				[IN] nUserID						登录句柄
				[IN] uTime						系统时间，单位秒
				[IN] cbNetResponse			操作结果回调函数
		* 返回值: ERROR_OK 成功, 其他失败
		*****************************************************************************/
		DLL_WIN_API int NET_DevSetTime(int nUserID, unsigned int uTime, NET_RESPONSE_CALLBACK cbNetResponse);

		/****************************************************************************
		* 名称: NET_DevSetOsd
		* 功能: 设置通道OSD
		* 参数:
				[IN] nUserID						登录句柄
				[IN] pOsdInfo					OSD信息
				[IN] cbNetResponse			操作结果回调函数
		* 返回值: ERROR_OK 成功, 其他失败
		*****************************************************************************/
		DLL_WIN_API int NET_DevSetOsd(int nUserID, OSD_INFO* pOsdInfo, NET_RESPONSE_CALLBACK cbNetResponse);

		/****************************************************************************
		* 名称: NET_HEARTBEAT_CALLBACK
		* 功能: 心跳结果回调
		* 参数:
				[IN] nUserID			登录句柄
				[IN] nFlag				固定值为1
		* 返回值: 无
		*****************************************************************************/
		typedef void(*NET_HEARTBEAT_CALLBACK)(int nUserID, int nFlag);

		/****************************************************************************
		* 名称: NET_StartHeartbeatService
		* 功能: 开启心跳服务
		* 参数:
				[IN] nUserID					登录句柄
				[IN] cbNetHeartBeat		心跳结果回调
		* 返回值: ERROR_OK 成功, 其他失败
		*****************************************************************************/
		DLL_WIN_API int NET_StartHeartbeatService(int nUserID, NET_HEARTBEAT_CALLBACK cbNetHeartBeat);

		/****************************************************************************
		* 名称: NET_StopHeartbeatService
		* 功能: 停止心跳服务
		* 参数:
				[IN] nUserID			登录句柄
		* 返回值: ERROR_OK 成功, 其他失败
		*****************************************************************************/
		DLL_WIN_API int NET_StopHeartbeatService(int nUserID);

#ifdef __cplusplus
}
#endif